package com.controller;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/pro")
public class ProducerController {

    //TODO: 生产者发送消息
    @RequestMapping("/send")
//    @ResponseBody
    public String send(@RequestParam("message") String message) {
        //创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //设置连接信息
        factory.setHost("192.168.159.142");
        factory.setPort(5672);
        factory.setUsername("guest");
        factory.setPassword("guest");

        // java8新的try..catch语法，这种语法的好处是不用我们手动的关闭connection
        try (Connection connection = factory.newConnection();
             //2. 通过连接对象创建信道
             Channel channel = connection.createChannel();) {
            //3. 让信道和队列建立连接,创建队列
            /*
             * 参数：
             * 1. 队列:queue_name
             * 2. 持久化：durable,是否需要将消息队列的消息持久化到磁盘
             * 3. 共享与否，exclusive，设置是否只一个消费者进行消费
             * 4. autoDelete : 自动删除，当最后一个消费者和mq断开连接之后是否删除消息
             * 5. args,可变参数
             */
            channel.queueDeclare("woniu12", false, false, false, null);
            /*
             * 4. 发消息
             * 1. exchange : 交换机
             * 2. routingkey : 路由的key
             * 3. BasicProperties : 其他参数
             * 4. byte[] 发送的消息体
             */
            channel.basicPublish("", "woniu12", null, message.getBytes());
            System.out.println("生产者发送了消息：" + message);

        } catch (Exception e) {
            e.printStackTrace();
        }

        return "完成生产";
    }
}
